from datetime import datetime
from . import db

# 用户表
class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    username = db.Column(db.String(100))  # 用户名
    pwd = db.Column(db.String(100))  # 密码
    flag = db.Column(db.Integer)  # 用户标识，0：普通用户 1：管理员

    comments = db.relationship("Comment", backref="user")

    def __repr__(self):
        return '<User %r>' % self.username

    def check_pwd(self, pwd):
        """
        检测密码是否正确
        :param pwd: 密码
        :return: 返回布尔值
        """
        from werkzeug.security import check_password_hash
        return self.pwd == pwd


# 歌手表
class Artist(db.Model):
    __tablename__ = 'artist'
    id = db.Column(db.Integer, primary_key=True)  # 编号
    artistName = db.Column(db.String(100))  # 歌手名
    style = db.Column(db.Integer, db.ForeignKey('tag.id'))  # 歌曲类型 0：全部 1:华语 2：欧美 3：日语 4：韩语 5 其他
    imgURL = db.Column(db.String(100))  # 头像
    isHot = db.Column(db.Boolean, default=0)  # 是否热门
    def __repr__(self):
        return "<Artist %r>" % self.artistName



# 歌曲表
class Song(db.Model):
    __tablename__ = 'song'
    id = db.Column(db.Integer, primary_key=True)  # 编号
    songName = db.Column(db.String(100))  # 歌曲名称
    singer = db.Column(db.String(100))  # 歌手名称
    fileURL = db.Column(db.String(100))  # 歌曲图片
    hits = db.Column(db.Integer, default=0)  # 点击量
    style = db.Column(db.Integer,db.ForeignKey('tag.id'))  # 歌曲类型 0：全部 1:华语 2：欧美 3：日语 4：韩语 5 其他
    collect = db.relationship('Collect', backref='song')  # 收藏外键关系关联
    comments = db.relationship("Comment", backref='song')  # 评论


# 歌曲收藏
class Collect(db.Model):
    __tablename__ = "collect"
    id = db.Column(db.Integer, primary_key=True)  # 编号
    song_id = db.Column(db.Integer, db.ForeignKey('song.id'))  # 所属歌曲
    user_id = db.Column(db.Integer)  # 所属用户
    score = db.Column(db.Integer)

# new
# 1. 标签表
class Tag(db.Model):
    # 5.1 设置映射表的名称
    __tablename__ = 'tag'
    # 5.2 设置表必须存在
    table_args = {'useexisting': True}
    # 5.3 设置映射关系
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True)
    addtime = db.Column(db.DateTime, index=True, default=datetime.now())

#     # 5.4 设置外键关联 movie表关联
    songs = db.relationship('Song', backref='tag')
    artist = db.relationship('Artist', backref='tag') # 管理员外键关联

#     # 5.5 设置返回值
    def __repr__(self):
        return "<Tag %r>" % self.id


# 评论表
class Comment(db.Model):
    __tablename__ = 'comment'
    table_args = {'useexisting': True}
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.Text)
    music_id = db.Column(db.Integer, db.ForeignKey('song.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    addtime = db.Column(db.DateTime, index=True, default=datetime.now())

    def __repr__(self):
        return "<Comment %r>" % self.id
